package first.libxml;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

import first.daodto.DaoImpl;
import first.libxml.handlers.LitAnalyzerDOM;
import first.libxml.handlers.LiteratureHandler;
import first.liter.Literature;

public class LitXml {
	public static List<Literature> setLitFromXmlSAX() 
	{		
		List<Literature> list;
		
		try 
		{
			//создание SAX-анализатора
			XMLReader reader = XMLReaderFactory.createXMLReader();
			
			LiteratureHandler sh = new LiteratureHandler();
			reader.setContentHandler(sh);
			list=sh.getLit();
			
			if(sh != null) 
			{
				//разбор xml-документа
				reader.parse("data//literatures.xml");
			}
			return list;
		} 
		catch (SAXException e) 
		{
			e.printStackTrace();
			System.out.print("ошибка SAX парсера \n");
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
			System.out.print("ошибка I/О потока \n");			
		}	
		
		return null;
	}

	public static List<Literature> setLitFromXmlDOM() 
	{	
		try 
		{
			//Создание DOM-анализатора (JSDK)	
			DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
		
			// распознавание xml-документа
			Document document = db.parse("data//literatures.xml");
			
			// создание DOM-анализатора (Xerces)
			/* DOMParser parser = new DOMParser();
			parser.parse("students.xml");
			Document document = parser.getDocument();*/
		
			Element root = document.getDocumentElement();
			List<Literature> lit = LitAnalyzerDOM.listBuilderLit(root);
		
			for (Literature a:lit) 
			{
				System.out.println("\nизнутри LitXML");
				System.out.println(a.toString());
			}
			
			return lit;
		} 
		catch (SAXException e) 
		{
			e.printStackTrace();
			System.out.print("ошибка SAX парсера");
		} 
		catch (ParserConfigurationException e) 
		{
			e.printStackTrace();
			System.out.print("ошибка конфигурации");
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
			System.out.print("ошибка I/О потока");
		}
	
		return null;
	}
	
	public static void pushListOfLitFromXmlToDBSAX()
	{
		DaoImpl DaoO=new DaoImpl();
		
		try {
			DaoO.start();
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		int t=0;
		List<Literature> ltr=setLitFromXmlSAX();
		
		try {
			for(Literature a:ltr)
			{
				t=DaoO.createLiterature(a);
				DaoO.stop();
			}
			
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			try {
				DaoO.stop();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void deleteListOfLitFromXmlToDBSAX()
	{
		DaoImpl DaoO=new DaoImpl();
		
		try {
			DaoO.start();
		} catch (SQLException e2) {
			// TODO Auto-generated catch blockpublic static List<Literature> setLitFromXmlSAX() 
			e2.printStackTrace();
		}
		
		int t=0;
		List<Literature> ltr=setLitFromXmlSAX();
		
		try {
			for(Literature a:ltr)
			{
				t=DaoO.deleteOneLiterature(a);
				DaoO.stop();
			}
			
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			try {
				DaoO.stop();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}
